let ad_utils_data = {
  AD_TYPE: 0,
  CURRENT_AD_TYPE: 0,
  CURRENT_CONTEXT: null,
  TIMER: null,
  FUNC_NAME: '',
  ARGUMENTS: [],
  TIMES: 2000,
  AD_UTILS_DATA_INIT_TYPE: 1,
  CURRENT_REPORT_UTILS: null,
  VIEW_SHOW_TIMESTAMP: 0,
}
/**
 * 修改ad_utils_data 数据
 * @param {Object} obj 需要修改的数据
 */
function change_ad_utils_data(obj) {
  if (typeof obj !== 'object') return
  Object.assign(ad_utils_data, obj)
}
/**
 * 广告工具类初始化
 */
function ad_utils_init() {
  if (ad_utils_data.AD_UTILS_DATA_INIT_TYPE !== 1) return
  Object.defineProperty(ad_utils_data, 'AD_TYPE', {
    set: function (val) {
      ad_utils_data.CURRENT_AD_TYPE = val
      switch (Number(val)) {
        case 1:
          ad_utils_data.TIMER = setTimeout(() => {
            LOG('AD_UTILS', 'timeout')
            carryOutFunc(true)
          }, ad_utils_data.TIMES)
          break
        case 2:
          if (ad_utils_data.TIMER) {
            clearTimeout(ad_utils_data.TIMER)
            ad_utils_data.TIMER = null
          }
          break
      }
    },
    get: function () {
      return ad_utils_data.CURRENT_AD_TYPE
    },
  })
  ad_utils_data.AD_UTILS_DATA_INIT_TYPE = 2
}
/**
 *
 * @param {Boolean} isReportOverTime 是否上报广告跳转超时事件
 */
function carryOutFunc(isReportOverTime = false) {
  if (isReportOverTime) {
    ad_utils_data.ARGUMENTS = ad_utils_data.ARGUMENTS.concat([isReportOverTime])
  }
  ad_utils_data.CURRENT_CONTEXT[ad_utils_data.FUNC_NAME](
    ...ad_utils_data.ARGUMENTS
  )
  ad_utils_data.CURRENT_CONTEXT = null
  ad_utils_data.FUNC_NAME = ''
  ad_utils_data.ARGUMENTS = []
  ad_utils_data.AD_TYPE = 0
  if (ad_utils_data.TIMER) {
    clearTimeout(ad_utils_data.TIMER)
    ad_utils_data.TIMER = null
  }
}
/**
 * 广告点击后事件回调
 * @param {Object} context 上下文
 * @param {String} funcName 函数明
 * @param {Array} args 传入的参数
 */
function adClickHandler(context, funcName, args) {
  if (ad_utils_data.CURRENT_AD_TYPE == 1 || !context || !funcName) return
  LOG('AD_UTILS', 'adclick')
  ad_utils_data.CURRENT_CONTEXT = context
  ad_utils_data.ARGUMENTS = args
  ad_utils_data.FUNC_NAME = funcName
  ad_utils_data.AD_TYPE = 1
}
function viewHideHandler(isNeedLoop = true) {
  if (
    !ad_utils_data.FUNC_NAME &&
    !ad_utils_data.CURRENT_CONTEXT &&
    isNeedLoop
  ) {
    setTimeout(
      () => {
        viewHideHandler(false)
      },
      ad_utils_data.TIMES > 1000 ? 1000 : ad_utils_data.TIMES
    )
    return
  }
  if (ad_utils_data.CURRENT_AD_TYPE !== 1) return
  LOG('AD_UTILS', 'viewhide')
  ad_utils_data.AD_TYPE = 2
}
function viewShowHandler() {
  if (ad_utils_data.FUNC_NAME) {
    ad_utils_data.VIEW_SHOW_TIMESTAMP = Date.now()
  }
  if (ad_utils_data.CURRENT_AD_TYPE !== 2) return
  LOG('AD_UTILS', 'viewshow')
  carryOutFunc()
}
export default {
  ad_utils_init,
  adClickHandler,
  viewShowHandler,
  viewHideHandler,
  change_ad_utils_data,
}
